package IO.texte;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import librairies.liste.interfaces.IListeE;
import librairies.liste.list.ListeDCE;

/**
 * permet la lecture d'un fichier texte brut
 * 
 * @author mlozah
 */
public class FichierTexte 
{
	private File file;
	
	/**
	 * Constructeur par recopie avec un file.
	 * @param file le file du fichier.
	 */
	public FichierTexte(File file)
	{
		this.file = file;
	}
	
	/**
	 * Constructeur par recopie avec le lien.
	 * @param file le lien du fichier.
	 */
	public FichierTexte(String file)
	{
		this.file = new File(file);
	}
	
	/**
	 * permet de lire le fichier.
	 * @return la list de lecture.
	 */
	public IListeE<String> lecture()
	{
		FileReader fr = null;
		IListeE<String> retour = new ListeDCE<String>();
		String tmp;
	      
		try 
		{
			if(!this.file.exists())
			{
				return null;
			}
			
			fr = new FileReader(this.file);
			
			tmp = new String();
			int i = 0;
			while((i = fr.read()) != -1)
			{
				tmp += (char)i;
				if((char)i == '\n')
				{
					retour.add(tmp);
					tmp = new String();
				}
			}
				
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
			return null;
		} catch (IOException e) 
		{
			e.printStackTrace();
			return null;
		} finally 
		{
			if(fr != null) 
			{
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return retour;
	}
	
	/**
	 * permet de sauvegarder des lignes dans un fichier
	 * @param lignes liste de ligne a inserer dans le fichier.
	 * @return vrai si ecriture a reussi.
	 */
	public boolean ecriture(IListeE<String> lignes)
	{
		if(lignes == null || lignes.size() == 0)
		{
			return false;
		}
		
		FileWriter fw;
		try 
		{
			fw = new FileWriter(this.file);
			
			for(int i = 0; i < lignes.size(); ++i)
			{
				String tmp = lignes.get(i) + "\n";
				fw.write(tmp);
			}
			fw.close();
		
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
			return false;
		} catch (IOException e) 
		{
			e.printStackTrace();
			return false;
		}
		return true;
	}
}